flowchart BT
  RequiredToBeUniform ==> textureSamplecall;
  CFreturn -.-> CFafterscale;
  posidentexpr ==> MayBeNonUniform;
  scalearg0 ==> posidentexpr;
  scalearg1 -.-> CFstart;
  scalecall -.-> CFstart;
  scalereturnvalue -.-> CFafterscale;
  scalereturnvalue ==> scalearg0;
  scalereturnvalue -.-> scalearg1;
  CFafterscale -.-> scalecall;
  tmpidentexpr -.-> CFafterscale;
  tmpidentexpr ==> scalereturnvalue;
  binaryexprresult ==> tmpidentexpr;
  binaryexprresult -.-> CFafterscale;
  ifstmt ==> binaryexprresult;
  tidentexpr -.-> ifstmt;
  textureSamplearg0 -.-> tidentexpr;
  sidentexpr -.-> ifstmt;
  textureSamplearg1 -.-> sidentexpr;
  posidentexpr1 -.-> MayBeNonUniform;
  textureSamplearg2 -.-> posidentexpr1;
  textureSamplereturnvalue -.-> MayBeNonUniform;
  textureSamplereturnvalue -.-> CFaftertextureSample;
  textureSamplereturnvalue -.-> textureSamplearg0;
  textureSamplereturnvalue -.-> textureSamplearg1;
  textureSamplereturnvalue -.-> textureSamplearg2;
  textureSamplecall ==> ifstmt;
  CFaftertextureSample -.-> textureSamplecall;

  style MayBeNonUniform fill:#941b1b
  style RequiredToBeUniform fill:#1818ab
  linkStyle 0,2,3,7,11,12,14,26 stroke:#941b1b

  CFstart([CF_start]);
  CFreturn([CF_return]);
  subgraph fnscale [call: scale]
    posidentexpr[formal_param_expr: pos];
    scalearg0[scale arg_0];
    scalearg1[scale arg_1];
    scalecall[call: scale];
    scalereturnvalue[Value_return: scale];
    CFafterscale([CF_after_scale]);
  end
  tmpidentexpr[const_ident_expr: tmp];
  ifstmt([if_stmt: if tmp > 1.0]);
  binaryexprresult[binary_expr: tmp > 1.0];
  subgraph fnsample [call: textureSample]
    tidentexpr[var_ident_expr: t];
    sidentexpr[var_ident_expr: s];
    textureSamplearg0[textureSample arg_0];
    textureSamplearg1[textureSample arg_1];
    textureSamplearg2[textureSample arg_2];
    posidentexpr1[formal_param_expr: pos];
    textureSamplecall([call: textureSample]);
    textureSamplereturnvalue[Value_return: textureSample];
    CFaftertextureSample([CF_after_textureSample]);
  end
